home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
otohime
/
src
/
oteff3.c
< prev
next >
Wrap
Text File
|
1994-11-16
|
7KB
|
366 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <file_dlg.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include <math.h>
#include "otohime.h"
#include "otolib.h"
/* fade int & out */
int fadeDialogId = -1 ;
int fadeOkBtnId = -1 ;
int fadePlayBtnId = -1 ;
int fadeUndoBtnId = -1 ;
int fadeInfBtnId = -1 ;
int fadeCanBtnId = -1 ;
int fadeMesId[32] = -1 ;
int fadeSubDialogId = -1 ;
int fadeNumId[4] = -1 ;
/* write head */
int headDialogId = -1 ;
int headSubDialogId = -1 ;
int headNumId[6] = -1 ;
int headMesId[13] = -1 ;
int headOkBtnId = -1 ;
int headPlayBtnId = -1 ;
int headUndoBtnId = -1 ;
int headCanBtnId = -1 ;
int headInfBtnId = -1 ;
/* FADE IN & OUT */
int sndEffectFade()
{
MMI_SendMessage( fadeDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
MMI_SendMessage( fadeDialogId, MM_SHOW, 0 ) ; /* 全体を見せる */
MMI_ExecSystem() ; /* Dialog表示へ・・・イベントループ */
MMI_SendMessage( fadeDialogId, MM_ERASE, 0 ) ;
MMI_SendMessage( fadeDialogId, MM_DETACH, 0 ) ;
return NOERR ;
}
/* initDataIOTFAD:fadeOkBtnId:MJ_DBUTTONL40の呼び出し関数 */
int fadeOkchk(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
SNDHEAD *head ;
int f, len ;
int var, min, max, delta, ptColumn ;
int i, num[4], start ;
setMsgColor( fadeMesId[0], EXE_COLOR ) ;
unDo() ;
head = (SNDHEAD *)sndBuf1 ;
f = ( head->freq ) * 1000 / 0x62 ; /* freq */
f = ( f + 50 )/100 * 100 ; /* 10の位を四捨五入 */
len = head->length ;
for( i=0 ; i<4 ; i++ )
{
MMI_SendMessage( fadeNumId[i], MM_GETNUMBOX, 5,
&var, &min, &max, &delta, &ptColumn ) ;
num[i] = var * f / 100 ;
}
start = 32 ;
for( i=0 ; i<num[0] ; i++ )
{
if( (start+i) >= (len+32) )
break ;
sndBuf1[ start + i ] = 0x80 ;
}
start = start + i ;
for( i=0 ; i<num[1] ; i++ )
{
if( (start+i) >= (len+32) )
break ;
sndBuf1[ start + i ] = sndDataMul( sndBuf1[ start + i ], i, num[1] );
}
start = 32 + len - 1 ;
for( i=0 ; i<num[3] ; i++ )
{
if( (start-i) < 32 )
break ;
sndBuf1[start-i] = 0x80 ;
}
start = start - i ;
for( i=0 ; i<num[2] ; i++ )
{
if( (start-i) < 32 )
break ;
sndBuf1[ start-i ] = sndDataMul( sndBuf1[ start-i ], i, num[2] );
}
setMsgColor( fadeMesId[0], MOJI_COLOR ) ;
return NOERR ;
}
/* xをSNDデータと見なし,それを r/m倍したSNDデータの値を返す */
sndDataMul( x, r, m )
int x, r, m ;
{
x &= 0xff ;
if( x >= 128 )
x = 128 - x ;
x = x * r / m ;
if( x <= 0 )
{
x = 128 - x ;
if( x > 254 )
x = 254 ;
}
else if( x > 127 )
x = 127 ;
return x ;
}
/* initDataIOTFAD:fadePlayBtnId:MJ_DBUTTONL40の呼び出し関数 */
int fadePlay(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
setMsgColor( fadeMesId[1], EXE_COLOR ) ;
sndPlay() ;
setMsgColor( fadeMesId[1], MOJI_COLOR ) ;
return NOERR ;
}
/* initDataIOTFAD:fadeUndoBtnId:MJ_DBUTTONL40の呼び出し関数 */
int fadeUndo(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
setMsgColor( fadeMesId[2], EXE_COLOR ) ;
unDo() ;
setMsgColor( fadeMesId[2], MOJI_COLOR ) ;
MMI_FlushEvnt() ; /* イベントをフラッシュ */
return NOERR ;
}
/* initDataIOTFAD:fadeInfBtnId:MJ_DBUTTONL40の呼び出し関数 */
int fadeInf(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
/* ダイアログを使えないようにする */
MTL_setAtrObj( fadeDialogId, MS_DSPONLYL40 ) ;
sndInf() ;
/* ダイアログを使えるように戻す */
MTL_resetAtrObj( fadeDialogId, (~MS_DSPONLYL40) ) ;
return NOERR ;
}
/* initDataIOTFAD:fadeCanBtnId:MJ_DBUTTONL40の呼び出し関数 */
int fadeCanchk(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
MMI_SetHaltFlag( TRUE ) ;
return NOERR ;
}
/* WRITE HEAD */
int sndEffectHead()
{
readSndHead() ;
MMI_SendMessage( headDialogId, MM_ATTACH, 1, MMI_GetBaseObj() ) ;
MMI_SendMessage( headDialogId, MM_SHOW, 0 ) ; /* 全体を見せる */
MMI_ExecSystem() ; /* Dialog表示へ・・・イベントループ */
MMI_SendMessage( headDialogId, MM_ERASE, 0 ) ;
MMI_SendMessage( headDialogId, MM_DETACH, 0 ) ;
return NOERR ;
}
int readSndHead()
{
SNDHEAD *head ;
int var, min, max, delta, ptColumn ;
int i, num[6] ;
head = (SNDHEAD *)sndBuf1 ;
num[0] = head->length ;
num[1] = head->looppoint ;
num[2] = head->looplength ;
num[3] = head->freq ;
num[4] = head->adjust ;
num[5] = head->note ;
for( i=0 ; i<6 ; i++ )
{
MMI_SendMessage( headNumId[i], MM_GETNUMBOX, 5,
&var, &min, &max, &delta, &ptColumn ) ;
MMI_SendMessage( headNumId[i], MM_SETNUMBOX, 5, /* 変更 */
num[i], min, max, delta, ptColumn ) ;
}
return NOERR ;
}
/* initDataIOTHED:headOkBtnId:MJ_DBUTTONL40の呼び出し関数 */
int headOkchk(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
SNDHEAD *head, *head2 ;
int var, min, max, delta, ptColumn ;
int i, num[6] ;
setMsgColor( headMesId[0], EXE_COLOR ) ;
head = (SNDHEAD *)sndBuf1 ;
for( i=0 ; i<6 ; i++ )
{
MMI_SendMessage( headNumId[i], MM_GETNUMBOX, 5,
&var, &min, &max, &delta, &ptColumn ) ;
num[i] = var ;
}
head->length = num[0] ;
head->looppoint = num[1] ;
head->looplength = num[2] ;
head->freq = num[3] ;
head->adjust = num[4] ;
head->note = num[5] ;
head2 = (SNDHEAD *)sndBuf2 ; /* 延びた部分を0x80で埋め尽くす */
if( (head->length) > (head2->length) )
{
int s, e ;
s = head2->length + 32 ;
e = head->length + 32 ;
if( e > sndBufSize )
e = sndBufSize ;
for( i=s ; i<e ; i++ )
{
sndBuf1[i] = 0x80 ;
}
}
setMsgColor( headMesId[0], MOJI_COLOR ) ;
MMI_FlushEvnt() ; /* イベントをフラッシュ */
return NOERR ;
}
/* initDataIOTHED:headPlayBtnId:MJ_DBUTTONL40の呼び出し関数 */
int headPlay(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
setMsgColor( headMesId[1], EXE_COLOR ) ;
sndPlay() ;
setMsgColor( headMesId[1], MOJI_COLOR ) ;
return NOERR ;
}
/* initDataIOTHED:headUndoBtnId:MJ_DBUTTONL40の呼び出し関数 */
int headUndo(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
setMsgColor( headMesId[2], EXE_COLOR ) ;
unDo() ;
setMsgColor( headMesId[2], MOJI_COLOR ) ;
MMI_FlushEvnt() ; /* イベントをフラッシュ */
return NOERR ;
}
/* initDataIOTHED:headCanBtnId:MJ_DBUTTONL40の呼び出し関数 */
int headCanchk(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
MMI_SetHaltFlag( TRUE ) ;
return NOERR ;
}
/* initDataIOTHED:headInfBtnId:MJ_DBUTTONL40の呼び出し関数 */
int headInf(kobj, messId, argc, pev, trigger)
int kobj ;
int messId ;
int argc ;
EVENT *pev ;
int trigger ;
{
/* ダイアログを使えないようにする */
MTL_setAtrObj( headDialogId, MS_DSPONLYL40 ) ;
sndInf() ;
/* ダイアログを使えるように戻す */
MTL_resetAtrObj( headDialogId, (~MS_DSPONLYL40) ) ;
return NOERR ;
}